<?php
namespace common\utils;


use Yii;
/*
    公共类
*/


class CommonFun
{

    //记入日志
    public static function writeLog($content,$tempDir='temp')
    {
        if(is_array($content) || is_object($content))
            $content = json_encode($content,JSON_UNESCAPED_UNICODE);
        
        $content = "[".date('Y-m-d H:i:s')."]".$content."\r\n";
        $dir = Yii::$app->params['logPath'];
        if($tempDir) $dir .= '/'.$tempDir;
        if(!is_dir($dir)){
            mkdir($dir,0777,true);

        }
        $path = $dir.'/'.date('Y-m-d').'.txt';
        file_put_contents($path,$content,FILE_APPEND);
        chown($path,'www');
    } 

    //发送邮箱
    public static function sendMailer($to,$content,$mailsubject='邮箱验证码') 
    {
        /**
         *实例化邮件类
         */
        date_default_timezone_set('Asia/Shanghai');  // 'Asia/Chongqing' or 'PRC'
        $smtpserver = "smtp.bestedm.org";              //SMTP服务器
        $smtpserverport = 2525;                      //SMTP服务器端口
        $smtpusermail = "service@topwine.33th.me";      //SMTP服务器的用户邮箱
        $smtpemailto = "784885758@qq.com";       //发送给谁
        $smtpuser = "service@topwine.33th.me";         //SMTP服务器的用户帐号
        $smtppass = "jjlcfhticjzmcadb";                 //SMTP服务器的用户密码
        $mailtype = "HTML";                      //邮件格式（HTML/TXT）,TXT为文本邮件
        $smtp = new \common\utils\Smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);
        $smtp->debug = false;                     //是否显示发送的调试信息
        // $smtp->log_file = BASE_DATA_PATH.'/log/sms/'.date("Y-m-d").'.txt';
        return $smtp->sendmail($to, $smtpusermail, $mailsubject, $content, $mailtype);
    }




    /**
     * 生成随机编号(两位随机 + 从2000-01-01 00:00:00 到现在的秒数+微秒+会员ID%1000)
     * 长度 =2位 + 10位 + 3位 + 3位  = 18位
     * 1000个会员同一微秒提订单，重复机率为1/100
     * @return string
     */
    public static function makeRandSn($memberId) {
        return mt_rand(10,99)
              . sprintf('%010d',time() - 946656000)
              . sprintf('%03d', (float) microtime() * 1000)
              . sprintf('%03d', (int) $memberId % 1000);
    }


    /**
     * 加密函数
     *
     * @param string $txt 需要加密的字符串
     * @param string $key 密钥
     * @return string 返回加密结果
     */
    public static function encrypt($txt, $key = 'eGlueWtqMTIz'){
      if (empty($txt)) return $txt;
      if (empty($key)) $key = md5('xinykj');
      $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
      $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
      $nh1 = rand(0,64);
      $nh2 = rand(0,64);
      $nh3 = rand(0,64);
      $ch1 = $chars{$nh1};
      $ch2 = $chars{$nh2};
      $ch3 = $chars{$nh3};
      $nhnum = $nh1 + $nh2 + $nh3;
      $knum = 0;$i = 0;
      while(isset($key{$i})) $knum +=ord($key{$i++});
      $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16);
      $txt = base64_encode(time().'_'.$txt);
      $txt = str_replace(array('+','/','='),array('-','_','.'),$txt);
      $tmp = '';
      $j=0;$k = 0;
      $tlen = strlen($txt);
      $klen = strlen($mdKey);
      for ($i=0; $i<$tlen; $i++) {
        $k = $k == $klen ? 0 : $k;
        $j = ($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
        $tmp .= $chars{$j};
      }
      $tmplen = strlen($tmp);
      $tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
      $tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
      $tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
      return $tmp;
    }

    /**
     * 解密函数
     *
     * @param string $txt 需要解密的字符串
     * @param string $key 密匙
     * @return string 字符串类型的返回结果
     */
    public static function decrypt($txt, $key = 'eGlueWtqMTIz', $ttl = 0)
    {
      if (empty($txt)) return $txt;
      if (empty($key)) $key = md5('xinykj');

      $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
      $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
      $knum = 0;$i = 0;
      $tlen = @strlen($txt);
      while(isset($key{$i})) $knum +=ord($key{$i++});
      $ch1 = @$txt{$knum % $tlen};
      $nh1 = strpos($chars,$ch1);
      $txt = @substr_replace($txt,'',$knum % $tlen--,1);
      $ch2 = @$txt{$nh1 % $tlen};
      $nh2 = @strpos($chars,$ch2);
      $txt = @substr_replace($txt,'',$nh1 % $tlen--,1);
      $ch3 = @$txt{$nh2 % $tlen};
      $nh3 = @strpos($chars,$ch3);
      $txt = @substr_replace($txt,'',$nh2 % $tlen--,1);
      $nhnum = $nh1 + $nh2 + $nh3;
      $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
      $tmp = '';
      $j=0; $k = 0;
      $tlen = @strlen($txt);
      $klen = @strlen($mdKey);
      for ($i=0; $i<$tlen; $i++) {
        $k = $k == $klen ? 0 : $k;
        $j = strpos($chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
        while ($j<0) $j+=64;
        $tmp .= $chars{$j};
      }
      $tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp);
      $tmp = trim(base64_decode($tmp));

      if (preg_match("/\d{10}_/s",substr($tmp,0,11))){
        if ($ttl > 0 && (time() - substr($tmp,0,11) > $ttl)){
          $tmp = null;
        }else{
          $tmp = substr($tmp,11);
        }
      }
      return $tmp;
    }     


    
}
